public class Test2 {
    //面试题 08.01 三步问题
    public int waysToStep(int n) {
        if (n == 1 || n == 2) return n;
        if (n == 3) return 4;
        int MOD = (int)1e9 + 7;
        //状态表示
        //dp表表示到第i个位置有多少种方式
        int[] dp = new int[n+1];
        //状态转移方程dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
        //初始化，因为出现了i-1，所以为了防止数组越界，就需要提前对数组进行初始化
        dp[1] = 1; dp[2] = 2; dp[3] = 4;
        for (int i = 4; i <= n; i++) {
            dp[i] = ((dp[i-1] + dp[i-2]) % MOD + dp[i-3]) % MOD;
        }
        return dp[n];
    }
}
